package com.cardone.platform.authority.dao;

import java.util.List;

import com.cardone.persistent.support.SimpleDao;
import com.cardone.platform.authority.dto.NavigationDto;

/**
 * 导航
 *
 * @author yaohaitao
 *
 */
public interface NavigationDao extends SimpleDao<NavigationDto> {
	/**
	 * sql标识
	 *
	 * @author yaohaitao
	 *
	 */
	public enum SqlIds {
		/**
		 * 删除
		 */
		@Deprecated
		deleteByIds,

		find,

		/**
		 * 查询
		 */
		findByCode,

		/**
		 * 查询
		 */
		@Deprecated
		findById,

		/**
		 * 查询
		 */
		@Deprecated
		findByLikeCode,

		/**
		 * 查询
		 */
		findByParentCode,

		/**
		 * 查询
		 */
		findByParentId,

		/**
		 * 插入
		 */
		@Deprecated
		insertByCode,

		insertByNotExistsCode,

		/**
		 * 读取
		 */
		@Deprecated
		readByCode,

		/**
		 * 读取
		 */
		@Deprecated
		readByLikeCode,

		/**
		 * 更新
		 */
		@Deprecated
		updateByCode;

		/**
		 * 根目录
		 */
		private static final String ROOT = "/platform/authority/navigation/";

		/**
		 * 标识
		 */
		private final String id;

		/**
		 * sql标识
		 */
		private SqlIds() {
			this.id = SqlIds.ROOT + this.name();
		}

		/**
		 * 获取
		 *
		 * @return sql标识
		 */
		public String id() {
			return this.id;
		}
	}

	/**
	 * 查询:导航
	 *
	 * @param mappedClass
	 *          返回类型
	 * @param siteCode
	 *          站代码
	 * @param typeCode
	 *          类别代码
	 * @param parentId
	 *          导航标识
	 * @return 导航对象集合
	 */
	<P> List<P> findListByParentId(final Class<P> mappedClass, final String siteCode, final String typeCode, final String parentId);

	/**
	 * 查询:导航
	 *
	 * @param mappedClass
	 *          返回类型
	 * @param siteCode
	 *          站代码
	 * @param typeCode
	 *          类别代码
	 * @param parentCode
	 *          父级代码
	 * @return 导航对象集合
	 */
	<P> List<P> findListByParentCode(final Class<P> mappedClass, final String siteCode, final String typeCode, final String parentCode);
}